home *** CD-ROM | disk | FTP | other *** search
/ Sun Solutions 1997 April to September / Sun Solutions CD - APR '97 - SEP '97 (704-3778-12 Rev. H)(Sun Microsystems, Inc.)(1997).iso / products / bin / httpd / Solaris_x86 / AT-index.cgi < prev    next >
Text File  |  1997-03-07  |  10KB  |  320 lines

  1. #!/bin/sh
  2. perl=/tmp/httpd/.excite/perl
  3. eval "exec $perl -x $0 $*"
  4. #!perl
  5.  
  6. ## Copyright (c) 1996 Excite, Inc.
  7. ##
  8. ## This CGI script allows users to index Excite, Inc. databases
  9. ## through a WWW interface. Naturally, there are plenty of security
  10. ## concerns associated with this scheme.
  11. ##
  12. ## This script appears as several different web pages, depending on
  13. ## its invocation. If invoked with a 'db=<database>' argument, the
  14. ## script prints out the configuration information for a particular
  15. ## database and then allows the user to change it. If
  16. ## invoked with 'Index=Index' and 'dbname=<database>', it will ininitialize 
  17. ## a database which has an existing database configuration file. 
  18. ## Without any of these arguments, it displays a list of currently 
  19. ## existing database.conf files, and allows the user to choose a database 
  20. ## to index.
  21.  
  22. BEGIN {
  23.   $root = "/tmp/httpd/.excite";
  24.   die "Invalid root directory '$root'\n" unless -d $root;
  25.   unshift(@INC, "$root/perllib");
  26. }
  27.  
  28. $| = 1;  ## don't buffer output
  29.  
  30. require 'os_functions.pl';
  31. require 'architext.pl';
  32. require 'architextConf.pl';
  33.  
  34. %form = &Architext'readFormArgs;
  35. %attr = &ArchitextConf'readConfig("$root/Architext.conf", $form{'db'});
  36.  
  37. if (&Architext'remoteMode($root)) {
  38.     $helppath = &Architext'helpPath();
  39. } else {
  40.     $helppath = $attr{'ArchitextURL'};
  41. }
  42.  
  43. $script_suffix = &Architext'scriptSuffix();
  44. $scriptname = "AT-index$script_suffix";
  45.  
  46. ## check for password, if one is specified in Architext.conf
  47. ## if it doesn't appear as a form arg, present password page
  48. $password = &Architext'password($attr{'ArchitextURL'},
  49.                 $scriptname,
  50.                 $attr{'Password'}, 
  51.                 %form) if $attr{'Password'};
  52.  
  53. $postpass = 
  54.     "<INPUT TYPE=\"hidden\" NAME=\"$password\" VALUE=\"$attr{'Password'}\">" if
  55.     ($attr{'Password'});
  56. $getpass = "?$password=$attr{'Password'}" if $postpass;
  57.  
  58. if ($form{'Stop'}) {
  59.    &Architext'printHeader($attr{'ArchitextURL'},
  60.                "Stop Indexing: $form{'db'}");
  61.    $pidfile = "$root/collections/$form{'db'}.pid";
  62.    if (! -e $pidfile) {
  63.        &Architext'exitError($attr{'ArchitextURL'}, 
  64.                 "<b>You tried to stop an indexing process that wasn't running</b>");
  65.    }
  66.    open(PID, "$pidfile");
  67.    while (<PID>) {
  68.        $pid = $_;
  69.    }
  70.    close(PID);
  71.    &kill_process($pid, $root);
  72.    &remove_files($pidfile);    
  73.    open(TERM, ">$root/collections/$form{'db'}.term");
  74.    close(TERM);
  75.    print "<p> <b>Indexing process number $pid has been terminated.</b>\n";
  76.    print <<EOF;
  77. <p> 
  78. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  79. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'db'}">
  80. <INPUT TYPE="submit" NAME="Admin" VALUE="Admin">
  81. Go back to the admin page for this collection.
  82. $postpass
  83. </FORM><BR>
  84. EOF
  85.     ;
  86.    &Architext'Copyright($attr{'ArchitextURL'});
  87.    exit(0);
  88. }
  89.  
  90. if ($form{'db'}) {
  91.     ## Print out configuration options for an already-existing
  92.     ## database so the user knows what will happen upon indexing
  93.  
  94.     ## Dump our standard header
  95.     &Architext'printHeader($attr{'ArchitextURL'},
  96.                "Collection Indexing: $form{'db'}");
  97.  
  98.     ## Check for the desired database.conf file.
  99.     $dbconfig = $root . "/collections/" . $form{'db'} . ".conf";
  100.     if (! -r $dbconfig) { 
  101.     &Architext'exitFileError($attr{'ArchitextURL'},
  102.                  $dbconfig, "does not exist"); }
  103.  
  104.     ## Read all the configuration information.
  105.     ##%attr = &ArchitextConf'readConfig("$root/Architext.conf", $form{'db'});
  106.  
  107.     print "<p> The collection you have chosen has the ";
  108.     print "following characteristics:\n";
  109.     ## Print the form.
  110.     &Architext'collectionCharacteristics($form{'db'}, $helppath, %attr); 
  111.     ## This form is just a little list of the options.
  112.     &printForm($form{'db'});    
  113.     &Architext'Copyright($attr{'ArchitextURL'});
  114.  
  115. }  elsif ($form{'Index'}) {
  116.     ## Assuming all the relevant configuration options are specified
  117.     ## as form arguments, this mode actually starts the indexing .
  118.  
  119.     ## Header again
  120.     &Architext'printHeader($attr{'ArchitextURL'},
  121.                "Collection Indexing: $form{'dbname'}");
  122.  
  123.     if (!$form{'dbname'}) { 
  124.     &Architext'exitError($attr{'ArchitextURL'},
  125.                  "Index specified with no dbname."); }
  126.  
  127.     ## Can we read the db.conf file?
  128.     $dbconfig = $root . "/collections/" . $form{'dbname'} . ".conf";
  129.     if (! -e $dbconfig && ! -r $dbconfig) {
  130.     &Architext'exitFileError($attr{'ArchitextURL'},
  131.                  $dbconfig, 
  132.                  "does not exist or is not readable.");
  133.     }
  134.  
  135.     if (-e "$root/collections/$form{'dbname'}.pid") {
  136.     print <<EOF;
  137. <p><b>An indexing process is already in progress for this collection.</b>
  138. <FORM ACTION="AT-index$script_suffix" METHOD=POST>
  139. <INPUT TYPE="submit" NAME="Stop" VALUE="Stop Indexing">
  140. Stop the indexing process that is currently running on this collection.
  141. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'dbname'}">
  142. $postpass
  143. </FORM><BR>
  144. EOF
  145.     ;
  146.     &Architext'Copyright($attr{'ArchitextURL'});
  147.     exit(0);
  148.     }
  149.  
  150.     ## tell the user it started the process.
  151.     ## variables below tell user how to access log file and prog
  152.     ## progress file from browser, and tell indexer exactly where
  153.     ## to put them.
  154.     $logname = "AT-$form{'dbname'}.log";
  155.     $progname = "AT-$form{'dbname'}.prog";
  156.     $errname = "AT-$form{'dbname'}.err";
  157.     $realpath = "$root/collections";
  158.     $urlpath = $attr{'ArchitextURL'};
  159.     print "<H2>Indexing initiated.</H2>\n";
  160.     print "<p><hr>\n";
  161.     if ($getpass) {
  162.     $getpass .= "&";
  163.     } else {
  164.     $getpass = "?";
  165.     }
  166.     $getpass .= "db=$form{'dbname'}";
  167.     if ($ews_port eq 'NT') {
  168.     $contact_phrase = "to contact you via the NT messenger service";
  169.     } else {
  170.     $contact_phrase = "to send email";
  171.     }
  172.     print <<EOF;
  173. <b>Possible Actions:</b>
  174. <p>While you are waiting for the indexing process to complete, you can: 
  175. <p> <FORM ACTION="AT-generate$script_suffix" METHOD=POST>
  176. <INPUT TYPE="submit" NAME="Status" VALUE="View Logs">
  177. View the log files created by the indexing process.  
  178. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'dbname'}">
  179. $postpass
  180. </FORM>
  181. <p>
  182. <FORM ACTION="AT-index$script_suffix" METHOD=POST>
  183. <INPUT TYPE="submit" NAME="Stop" VALUE="Stop Indexing">
  184. Stop the indexing process that was just initiated.
  185. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'dbname'}">
  186. $postpass
  187. </FORM>
  188. <p> <FORM ACTION="AT-generate$script_suffix" METHOD=POST>
  189. <INPUT TYPE="submit" NAME="Generating" VALUE="Generate">
  190. Generate a search page for this collection.
  191. $postpass
  192. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'dbname'}">
  193. </FORM>
  194. <p> 
  195. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  196. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'dbname'}">
  197. <INPUT TYPE="submit" NAME="Admin" VALUE="Admin">
  198. Go back to the admin page for this collection.
  199. $postpass
  200. </FORM><BR>
  201.  
  202. <p><b>Note:</b>Unless you have
  203. configured this collection $contact_phrase when the indexing process 
  204. is done, you will need to view the log files or visit the admin page
  205. for this collection if you want to know when indexing has finished.
  206. EOF
  207.     ;
  208.     ## Kick off the indexing process here.
  209.     $aindex = $root . "/aindex.pl";
  210.     ## remove any stale .inv files
  211.     unlink("$root/collections/$form{'dbname'}.inv");
  212.     
  213.     &spawn_indexer($aindex, $attr{'PerlRoot'},
  214.            $form{'dbname'}, "$realpath/$logname",
  215.            "$realpath/$progname", "$realpath/$errname");
  216.  
  217.     ## sanity check here to make sure aindex.pl actually ran
  218.     sleep 5; ## give indexer time to create .inv file
  219.     if (! -e "$root/collections/$form{'dbname'}.inv") {
  220.     open(ERRFILE, ">$realpath/$errname");
  221.     print ERRFILE "Error: Cannot invoke aindex.pl\n";
  222.     close(ERRFILE);
  223.     open(ERRFILE, ">$root/collections/$form{'dbname'}.err");
  224.     close(ERRFILE);
  225.     } else {
  226.     unlink("$root/collections/$form{'dbname'}.inv");
  227.     }
  228.     &Architext'Copyright($attr{'ArchitextURL'});
  229. } else {
  230.     ## Print out the top-level screen: scan the root directory for
  231.     ## db.conf files, and allow the user to select a db.conf
  232.     ## file.
  233.  
  234.     opendir(CONF, "$root/collections");
  235.     @dbconf = grep(/\.conf$/, readdir(CONF));
  236.  
  237.     &Architext'printHeader($attr{'ArchitextURL'},"Collection Indexing");
  238.  
  239.     if ($#dbconf > -1) {
  240.     print <<EOF;
  241. <FORM ACTION="AT-index$script_suffix" METHOD=POST>
  242. Choose a document collection to index.<P>
  243. <DL>
  244. <DT> 
  245. Existing <a href="${helppath}AT-helpdoc.html#Document Collections">
  246. document collections:</a> <DD>
  247. <SELECT NAME="db" SIZE=5>
  248. EOF
  249.     ;
  250.     for (@dbconf) {
  251.     s|\.conf$||;
  252.     next if $_ eq 'Architext';
  253.     print "<OPTION> $_\n";
  254.     }
  255.     print <<EOF;
  256. </SELECT>
  257. </DL>
  258. <INPUT TYPE="submit" NAME="Select" VALUE="Select">
  259. $postpass
  260. </FORM><BR>
  261. EOF
  262.     ;
  263. } else {
  264.     print <<EOF;
  265. <p> There are no document collections currently defined.  Please
  266. click on the configure button to go to the collection configuration
  267. screen.
  268. <FORM ACTION="AT-config$script_suffix" METHOD=POST>
  269. <INPUT TYPE="submit" VALUE="Configure">
  270. $postpass
  271. </FORM><BR>
  272. EOF
  273.     ;
  274. }
  275.     &Architext'Copyright($attr{'ArchitextURL'});
  276. }
  277.  
  278. sub printForm {
  279.     local($db) = shift;
  280.     local($url) = $attr{'ArchitextURL'};
  281.     if ($ews_port eq 'NT') {
  282.     $contact_mode = 
  283.         "a hostname for a machine running the NT messenger service";
  284.     $contact_method = "the messenger service";
  285.     } else {
  286.     $contact_mode = "an email address";
  287.     $contact_method = "email";
  288.     }
  289.     print <<EOF;
  290. <p> Click on the <b>Index</b> button to start indexing.
  291. Depending on the size of your collection, this may take
  292. anywhere from a few moments to a few hours.
  293. After you initiate the indexing process you will be given links
  294. to several log files that you can reload periodically to monitor the
  295. progress of the indexing process.  If you specified $contact_mode
  296. for this collection, you will also be notified via $contact_method
  297. when the indexing process finishes.
  298. <p><FORM ACTION="AT-index$script_suffix" METHOD=POST>
  299. <INPUT TYPE="submit" NAME="index" VALUE="Index">
  300. Start an indexing process for this collection.
  301. <INPUT TYPE="hidden" NAME="Index" VALUE="Index">
  302. <INPUT TYPE="hidden" NAME="dbname" VALUE="$db">
  303. $postpass
  304. </FORM>
  305.  
  306. <p> 
  307. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  308. <INPUT TYPE="hidden" NAME="db" VALUE="$db">
  309. <INPUT TYPE="submit" NAME="Admin" VALUE="Admin">
  310. Go back to the admin page for this collection.
  311. $postpass
  312. </FORM><BR>
  313. EOF
  314.     ;
  315. }
  316.  
  317.  
  318.  
  319.  
  320.